﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using CANO.Data.DAOs;
using System.Web.UI.HtmlControls;

namespace CANO.WebSite.Contactos
{
	public partial class NewContacto : System.Web.UI.Page
	{
		List<ContactoTelefonosDAO> newTelefonos = new List<ContactoTelefonosDAO>();
		List<AsignacionesDAO> asignacionesList = new List<AsignacionesDAO>();

		protected void Page_Load(object sender, EventArgs e)
		{
			if (!Page.IsPostBack)
			{
				//Set Session variables
				Session["ContactoTelefonosToAdd"] = newTelefonos;
				Session["AsignacionesToAdd"] = asignacionesList;
				Session["currentModule"] = "Contacts";

				//Fill Data
				this.fillDropDowns();
				txtFechaOrigen.Value = DateTime.Now.ToShortDateString() + " " + DateTime.Now.ToShortTimeString();
				if (new UsuarioDAO().getUser(Convert.ToInt32(Session["CurrentUserID"])).Rol != 3)
					AddAsignacion.Visible = true;

				if (new UsuarioDAO().getUser(Convert.ToInt32(Session["CurrentUserID"])).Rol == 1)
					pnlAsignaciones.Visible = false;
			}
			//Bind Events buttons
			btnCrearContacto.Click += new EventHandler(btnCrearContacto_Click);
			btnAgregar.Click += new EventHandler(btnAgregar_Click);
			btnAddAsignacion.Click += new EventHandler(btnAddAsignacion_Click);

			newTelefonos = (List<ContactoTelefonosDAO>)Session["ContactoTelefonosToAdd"];
			asignacionesList = (List<AsignacionesDAO>)Session["AsignacionesToAdd"];
		}

		void btnAddAsignacion_Click(object sender, EventArgs e)
		{
			AsignacionesDAO nuevaAsignacion = new AsignacionesDAO();
			nuevaAsignacion.Usuario = Convert.ToInt32(ddlUser.SelectedValue);

			ddlUser.Items.Remove(ddlUser.SelectedItem);
			ddlUser.DataBind();

			asignacionesList.Add(nuevaAsignacion);

			Session["AsignacionesToAdd"] = asignacionesList;
		}

	

		void btnAgregar_Click(object sender, EventArgs e)
		{
			ContactoTelefonosDAO nuevoTelefono = new ContactoTelefonosDAO();
			nuevoTelefono.Telefono = txtNumero.Value;
			nuevoTelefono.TipoTelefonoID = Convert.ToInt32(ddlTipoTelefono.SelectedValue);

			newTelefonos.Add(nuevoTelefono);

			Session["ContactoTelefonosToAdd"] = newTelefonos;
		}

		void btnCrearContacto_Click(object sender, EventArgs e)
		{
			//Validate that contact is unique
			if (!new ContactoDAO().IsUnique(txtApellido.Value, txtNombre.Value))
			{
				Response.Write("<script >alert('El contacto que está intentando agregar ya existe. Por favor, verifique los datos.');</script>");
				return;
			}

			//Contact Properties
			ContactoDAO newContact = new ContactoDAO();
			
			//Required
			newContact.FechaOrigen = Convert.ToDateTime(txtFechaOrigen.Value);

			newContact.Apellido = txtApellido.Value;
			newContact.Nombre = txtNombre.Value;

			newContact.Email = txtEmailPrincipal.Value;
			if (ddlLugarInfluencia.SelectedIndex > 0)
				newContact.LugarInfluencia = Convert.ToInt32(ddlLugarInfluencia.SelectedValue);
			else
				newContact.LugarInfluencia = null;

			if (ddlTipoPropiedad.SelectedIndex > 0)
				newContact.TipoPropiedad = Convert.ToInt32(ddlTipoPropiedad.SelectedValue);
			else
				newContact.TipoPropiedad = null;


			if (ddlEspecialidad.SelectedIndex > 0)
				newContact.Especialidad = Convert.ToInt32(ddlEspecialidad.SelectedValue);
			else
				newContact.Especialidad = null;


			if (ddlNacionalidad.SelectedIndex > 0)
				newContact.Nacionalidad = Convert.ToInt32(ddlNacionalidad.SelectedValue);
			else
				newContact.Nacionalidad = null;

			if (rdbPropietarioSi.Checked)
				newContact.IsPropietario = 1;
			else
				newContact.IsPropietario = 0;
		

			newContact.DireccionPersonal = txtDireccionPersonal.Value;
			newContact.Dni = txtDNI.Value;
			newContact.EmailSecundario = txtEmailSecundario.Value;

			if (string.IsNullOrEmpty(txtFechaNacimiento.Value))
				newContact.FechaNacimiento = null;
			else
				newContact.FechaNacimiento = Convert.ToDateTime(txtFechaNacimiento.Value);

			newContact.DireccionLaboral = txtDireccionLaboral.Value;
			newContact.PaginaWeb = txtSitioWeb.Value;
			newContact.CuilCuit = txtCUITCUIL.Value;
			if (ddlProfesion.SelectedIndex == 0)
				newContact.Profesion = null;
			else
				newContact.Profesion = Convert.ToInt32(ddlProfesion.SelectedValue);
			newContact.Notas = txtNotas.Value;
			newContact.LastUpdate = DateTime.Now;

			
			//Info Familiar
			//newContact.NombreConyuge = txtNombreConyuge.Value;
			//newContact.ContactoConyuge = txtContactoConyuge.Value;
			//newContact.NombreHijos = txtNombreHijos.Value;
			newContact.NombreConyuge = txtInfoFamiliar.Value;
			
			int ContactoID = ContactoDAO.create(newContact);

            if (ContactoID == 0)
            {
                Response.Write("<script >alert('Por favor, verifique los datos.');</script>");
                return;
            }

			//Telefonos
			//Celular
			if (txtTelefonoCelular.Value != string.Empty)
			{
				ContactoDAO.AddCelular(ContactoID, txtTelefonoCelular.Value);
			}



			foreach (var telefono in newTelefonos)
			{
				ContactoTelefonosDAO contactoTelefono = new ContactoTelefonosDAO();
				contactoTelefono.Contacto = ContactoID;
				contactoTelefono.Telefono = telefono.Telefono;
				contactoTelefono.TipoTelefonoID = telefono.TipoTelefonoID;
				contactoTelefono.create();
			}
			//Asignaciones
			AsignacionesDAO asignacionCurrentUser = new AsignacionesDAO();
			asignacionCurrentUser.Usuario = Convert.ToInt32(Session["CurrentUserID"]);
			asignacionCurrentUser.Contacto = ContactoID;
			asignacionCurrentUser.create();

			foreach (var asignacion in asignacionesList)
			{
				AsignacionesDAO asignacionDAO = new AsignacionesDAO();
				asignacionDAO.Usuario = asignacion.Usuario;
				asignacionDAO.Contacto = ContactoID;
				asignacionDAO.create();
			}
			//Observaciones
			List<ObservacionesDAO> listObservaciones = new List<ObservacionesDAO>();
			listObservaciones = (List<ObservacionesDAO>)Session["ObservacionesToAdd"];

			foreach (var observacion in listObservaciones)
			{
				ObservacionesDAO observacionDAO = new ObservacionesDAO();
				observacionDAO.Contacto = ContactoID;
				observacionDAO.FechaObservacion = observacion.FechaObservacion;
				observacionDAO.Observacion = observacion.Observacion;
				observacionDAO.UsuarioCreatedBy = observacion.UsuarioCreatedBy;
				observacionDAO.create();
			}

			//Send Notificaciones
			NotificationDAO notificacion = new NotificationDAO();

			notificacion.Mensaje = string.Format("Se genero el contacto {0} y se te asignó.",
								newContact.Apellido + ", " + newContact.Nombre);

			List<AsignacionesDAO> AsignacionesList = AsignacionesDAO.getAllByContactID(ContactoID);

			foreach (var item in AsignacionesList)
			{
				notificacion.Insert(Convert.ToInt32(Session["CurrentUserID"]), item.Usuario);
			}


			//Response.Redirect("/contacts/contact.aspx?ContactID=" + ContactoID.ToString());
			Response.Redirect("/contacts/contacts.aspx");
		}

		private void fillDropDowns()
		{
			//Fill ddlLugarInfluencia
			ddlLugarInfluencia.DataSource = LugarInfluenciaDAO.getAll();
			ddlLugarInfluencia.DataValueField = "LugarInfluenciaID";
			ddlLugarInfluencia.DataTextField = "LugarInfluencia";
			ddlLugarInfluencia.DataBind();
			ddlLugarInfluencia.Items.Insert(0, "-- Seleccione un Lugar de Influencia --");

			//Fill ddlTipoPropiedad
			ddlTipoPropiedad.DataSource = TipoPropiedadDAO.getAll();
			ddlTipoPropiedad.DataValueField = "TipoPropiedadID";
			ddlTipoPropiedad.DataTextField = "TipoPropiedad";
			ddlTipoPropiedad.DataBind();
			ddlTipoPropiedad.Items.Insert(0, "-- Seleccione un Tipo de Propiedad --");

			//Fill ddlEspecialidad
			ddlEspecialidad.DataSource = EspecialidadDAO.getAll();
			ddlEspecialidad.DataValueField = "EspecialidadID";
			ddlEspecialidad.DataTextField = "Especialidad";
			ddlEspecialidad.DataBind();
			ddlEspecialidad.Items.Insert(0, "-- Seleccione una Especialidad --");
		
			//Fill TipoTelefono
			ddlTipoTelefono.DataSource = TipoTelefonoDAO.getAll();
			ddlTipoTelefono.DataValueField = "TipoTelefonoID";
			ddlTipoTelefono.DataTextField = "TipoTelefono";
			ddlTipoTelefono.DataBind();
			ddlTipoTelefono.Items.Insert(0, "-- Seleccione un Tipo de Telefono --");

			//Fill ddlUser para Asignaciones
			ddlUser.DataSource = UsuarioDAO.getAll();
			ddlUser.DataValueField = "UsuarioID";
			ddlUser.DataTextField = "fullName";
			ddlUser.DataBind();
			ddlUser.Items.Insert(0, "-- Seleccione un Usuario --");

			//Fill Nacionalidad
			ddlNacionalidad.DataSource = NacionalidadDAO.getAll();
			ddlNacionalidad.DataValueField = "NacionalidadID";
			ddlNacionalidad.DataTextField = "Nacionalidad";
			ddlNacionalidad.DataBind();
			ddlNacionalidad.Items.Insert(0, "-- Seleccione una Nacionalidad --");
			//ddlNacionalidad.SelectedValue = "1"; // ToDo: Validar, deberia ser siempre Argentina

			//Fill TipoProfesion
			ddlProfesion.DataSource = ProfesionDAO.getAll();
			ddlProfesion.DataValueField = "TipoProfesionID";
			ddlProfesion.DataTextField = "ProfesionDesc";
			ddlProfesion.DataBind();
			ddlProfesion.Items.Insert(0, "-- Seleccione una Profesión --");


			//rptAsignaciones.DataSource = UsuarioDAO.getAll();
			//rptAsignaciones.DataBind();
		}

	}
}